<!DOCTYPE HTML>

<html lang="en">
<head>

<title>AbstractFallbackMethodSecurityMetadataSource (spring-security-docs 5.6.3 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="AbstractFallbackMethodSecurityMetadataSource (spring-security-docs 5.6.3 API)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":6,"i1":6,"i2":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">

<div class="topNav"><a id="navbar.top">

</a>
<div class="skipNav"><a href="AbstractFallbackMethodSecurityMetadataSource.html#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">

</a></div>

</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>

<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.springframework.security.access.method</a></div>
<h2 title="Class AbstractFallbackMethodSecurityMetadataSource" class="title">Class AbstractFallbackMethodSecurityMetadataSource</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="AbstractMethodSecurityMetadataSource.html" title="class in org.springframework.security.access.method">org.springframework.security.access.method.AbstractMethodSecurityMetadataSource</a></li>
<li>
<ul class="inheritance">
<li>org.springframework.security.access.method.AbstractFallbackMethodSecurityMetadataSource</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code>org.springframework.aop.framework.AopInfrastructureBean</code>, <code><a href="MethodSecurityMetadataSource.html" title="interface in org.springframework.security.access.method">MethodSecurityMetadataSource</a></code>, <code><a href="../SecurityMetadataSource.html" title="interface in org.springframework.security.access">SecurityMetadataSource</a></code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="../annotation/Jsr250MethodSecurityMetadataSource.html" title="class in org.springframework.security.access.annotation">Jsr250MethodSecurityMetadataSource</a></code>, <code><a href="MapBasedMethodSecurityMetadataSource.html" title="class in org.springframework.security.access.method">MapBasedMethodSecurityMetadataSource</a></code>, <code><a href="../annotation/SecuredAnnotationSecurityMetadataSource.html" title="class in org.springframework.security.access.annotation">SecuredAnnotationSecurityMetadataSource</a></code></dd>
</dl>
<hr>
<pre>public abstract class <span class="typeNameLabel">AbstractFallbackMethodSecurityMetadataSource</span>
extends <a href="AbstractMethodSecurityMetadataSource.html" title="class in org.springframework.security.access.method">AbstractMethodSecurityMetadataSource</a></pre>
<div class="block">Abstract implementation of <a href="MethodSecurityMetadataSource.html" title="interface in org.springframework.security.access.method"><code>MethodSecurityMetadataSource</code></a> that supports both
Spring AOP and AspectJ and performs attribute resolution from: 1. specific target
method; 2. target class; 3. declaring method; 4. declaring class/interface. Use with
<a href="DelegatingMethodSecurityMetadataSource.html" title="class in org.springframework.security.access.method"><code>DelegatingMethodSecurityMetadataSource</code></a> for caching support.
<p>
This class mimics the behaviour of Spring's
<tt>AbstractFallbackTransactionAttributeSource</tt> class.
<p>
Note that this class cannot extract security metadata where that metadata is expressed
by way of a target method/class (i.e. #1 and #2 above) AND the target method/class is
encapsulated in another proxy object. Spring Security does not walk a proxy chain to
locate the concrete/final target object. Consider making Spring Security your final
advisor (so it advises the final target, as opposed to another proxy), move the
metadata to declared methods or interfaces the proxy implements, or provide your own
replacement <tt>MethodSecurityMetadataSource</tt>.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.0</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">

</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.springframework.security.access.method.AbstractMethodSecurityMetadataSource">

</a>
<h3>Fields inherited from class&nbsp;org.springframework.security.access.method.<a href="AbstractMethodSecurityMetadataSource.html" title="class in org.springframework.security.access.method">AbstractMethodSecurityMetadataSource</a></h3>
<code><a href="AbstractMethodSecurityMetadataSource.html#logger">logger</a></code></li>
</ul>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">

</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="AbstractFallbackMethodSecurityMetadataSource.html#%3Cinit%3E()">AbstractFallbackMethodSecurityMetadataSource</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">

</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>protected abstract java.util.Collection&lt;<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AbstractFallbackMethodSecurityMetadataSource.html#findAttributes(java.lang.Class)">findAttributes</a></span>&#8203;(java.lang.Class&lt;?&gt;&nbsp;clazz)</code></th>
<td class="colLast">
<div class="block">Obtains the security metadata registered against the specified class.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected abstract java.util.Collection&lt;<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AbstractFallbackMethodSecurityMetadataSource.html#findAttributes(java.lang.reflect.Method,java.lang.Class)">findAttributes</a></span>&#8203;(java.lang.reflect.Method&nbsp;method,
java.lang.Class&lt;?&gt;&nbsp;targetClass)</code></th>
<td class="colLast">
<div class="block">Obtains the security metadata applicable to the specified method invocation.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>java.util.Collection&lt;<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AbstractFallbackMethodSecurityMetadataSource.html#getAttributes(java.lang.reflect.Method,java.lang.Class)">getAttributes</a></span>&#8203;(java.lang.reflect.Method&nbsp;method,
java.lang.Class&lt;?&gt;&nbsp;targetClass)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.springframework.security.access.method.AbstractMethodSecurityMetadataSource">

</a>
<h3>Methods inherited from class&nbsp;org.springframework.security.access.method.<a href="AbstractMethodSecurityMetadataSource.html" title="class in org.springframework.security.access.method">AbstractMethodSecurityMetadataSource</a></h3>
<code><a href="AbstractMethodSecurityMetadataSource.html#getAttributes(java.lang.Object)">getAttributes</a>, <a href="AbstractMethodSecurityMetadataSource.html#supports(java.lang.Class)">supports</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">

</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.springframework.security.access.SecurityMetadataSource">

</a>
<h3>Methods inherited from interface&nbsp;org.springframework.security.access.<a href="../SecurityMetadataSource.html" title="interface in org.springframework.security.access">SecurityMetadataSource</a></h3>
<code><a href="../SecurityMetadataSource.html#getAllConfigAttributes()">getAllConfigAttributes</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">

</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>AbstractFallbackMethodSecurityMetadataSource</h4>
<pre>public&nbsp;AbstractFallbackMethodSecurityMetadataSource()</pre>
</li>
</ul>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">

</a>
<h3>Method Detail</h3>
<a id="getAttributes(java.lang.reflect.Method,java.lang.Class)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>getAttributes</h4>
<pre class="methodSignature">public&nbsp;java.util.Collection&lt;<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&gt;&nbsp;getAttributes&#8203;(java.lang.reflect.Method&nbsp;method,
                                                           java.lang.Class&lt;?&gt;&nbsp;targetClass)</pre>
</li>
</ul>
<a id="findAttributes(java.lang.reflect.Method,java.lang.Class)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>findAttributes</h4>
<pre class="methodSignature">protected abstract&nbsp;java.util.Collection&lt;<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&gt;&nbsp;findAttributes&#8203;(java.lang.reflect.Method&nbsp;method,
                                                                        java.lang.Class&lt;?&gt;&nbsp;targetClass)</pre>
<div class="block">Obtains the security metadata applicable to the specified method invocation.
<p>
Note that the <code>Method.getDeclaringClass()</code> may not equal the
<code>targetClass</code>. Both parameters are provided to assist subclasses which
may wish to provide advanced capabilities related to method metadata being
"registered" against a method even if the target class does not declare the method
(i.e. the subclass may only inherit the method).</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>method</code> - the method for the current invocation (never <code>null</code>)</dd>
<dd><code>targetClass</code> - the target class for the invocation (may be <code>null</code>)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the security metadata (or null if no metadata applies)</dd>
</dl>
</li>
</ul>
<a id="findAttributes(java.lang.Class)">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>findAttributes</h4>
<pre class="methodSignature">protected abstract&nbsp;java.util.Collection&lt;<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&gt;&nbsp;findAttributes&#8203;(java.lang.Class&lt;?&gt;&nbsp;clazz)</pre>
<div class="block">Obtains the security metadata registered against the specified class.
<p>
Subclasses should only return metadata expressed at a class level. Subclasses
should NOT aggregate metadata for each method registered against a class, as the
abstract superclass will separate invoke <a href="AbstractFallbackMethodSecurityMetadataSource.html#findAttributes(java.lang.reflect.Method,java.lang.Class)"><code>findAttributes(Method, Class)</code></a> for
individual methods as appropriate.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>clazz</code> - the target class for the invocation (never <code>null</code>)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the security metadata (or null if no metadata applies)</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>

<footer role="contentinfo">
<nav role="navigation">

<div class="bottomNav"><a id="navbar.bottom">

</a>
<div class="skipNav"><a href="AbstractFallbackMethodSecurityMetadataSource.html#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="AbstractFallbackMethodSecurityMetadataSource.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">

</a></div>

</nav>
</footer>
<script>if (window.parent == window) {(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-2728886-23', 'auto', {'siteSpeedSampleRate': 100});ga('send', 'pageview');}</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7040ce2aff39980c","token":"bffcb8a918ae4755926f76178bfbd26b","version":"2021.12.0","si":100}' crossorigin="anonymous"></script>
</body>
</html>
